/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package negocio;

import java.util.*;
import persistencia.PersistenciaArticulo;

/**
 * Clase que representa una pelicula y que hereda de Articulo
 * @author JAVA
 */
public class Pelicula extends Articulo {

    private String genero;
    private int anyo;
    private int duracion;
    private String actores;
    private int edadMinima;
    private String director;

    /**
     * 
     * @param fechaAlta
     * @param proveedor asociado al articulo
     * @param booleano que indica si el articulo se encuentra disponible para su alquiler o no
     * @param tarifa asociada al articulo
     * @param nombre de la pelicula
     * @param genero de la pelicula
     * @param anyo
     * @param duracion en minutos
     * @param actores separados por comas
     * @param valoracion de la pelicula
     * @param edadMinima
     * @param director
     * @param booleano que indica si la pelicula se puede vender o no
     */
    public Pelicula(Date fechaAlta, Proveedor prove, Tarifa tarifa, String titulo, String genero, int anyo, int duracion, String actores, int edadMinima, String director, boolean seVende) {
        super(fechaAlta, prove, true, tarifa, seVende, titulo);
        this.genero = genero;
        this.anyo = anyo;
        this.duracion = duracion;
        this.actores = actores;
        this.edadMinima = edadMinima;
        this.director = director;
    }

    /**
     * @param id
     * @param fechaAlta
     * @param proveedor asociado al articulo
     * @param booleano que indica si el articulo se encuentra disponible para su alquiler o no
     * @param tarifa asociada al articulo
     * @param nombre de la pelicula
     * @param genero de la pelicula
     * @param anyo
     * @param duracion en minutos
     * @param actores separados por comas
     * @param valoracion de la pelicula
     * @param edadMinima
     * @param director
     * @param booleano que indica si la pelicula se puede vender o no
     */
    public Pelicula(int id, Date fechaAlta, Proveedor prove, boolean disponible, Tarifa tarifa, String titulo, String genero, int anyo, int duracion, String actores, float valoracion, int edadMinima, String director, boolean seVende) {
        //super(id,fechaAlta,prove,true,tarifa,true,valoracion,titulo);
        super(id, fechaAlta, prove, disponible, tarifa, seVende, valoracion, titulo);
        this.genero = genero;
        this.anyo = anyo;
        this.duracion = duracion;
        this.actores = actores;
        this.edadMinima = edadMinima;
        this.director = director;
    }

    public String getDirector() {
        return director;
    }

    public void setDirector(String director) {
        this.director = director;
    }

    public String getActores() {
        return actores;
    }

    public void setActores(String actores) {
        this.actores = actores;
    }

    public int getAnyo() {
        return anyo;
    }

    public void setAnyo(int anyo) {
        this.anyo = anyo;
    }

    public int getDuracion() {
        return duracion;
    }

    public void setDuracion(int duracion) {
        this.duracion = duracion;
    }

    public int getEdadMinima() {
        return edadMinima;
    }

    public void setEdadMinima(int edadMinima) {
        this.edadMinima = edadMinima;
    }

    public String getGenero() {
        return genero;
    }

    public void setGenero(String genero) {
        this.genero = genero;
    }

    @Override
    public String toString() {

        return "\n --------------------- \n --- PELICULAS --- \n --------------------- \n" + " Id: " + super.getId() + "\n Titulo: " + super.getTitulo() + "\n Genero: " + genero + "\n Año: " + anyo + "\n Duracion: " + duracion + "\n Actores: " + actores + "\n Director: " + director + "\n Valoracion: " + super.getValoracion() + "\n EdadMinima: " + edadMinima + "\n Proveedor: " + super.getProve().getNombre() + "\n Disponible: " + super.isDisponible() + "\n --------------------- \n";

    }

    public void altaPelicula(Pelicula a1) throws ExcepcionPersistencia {

        if (PersistenciaArticulo.insertarPelicula(a1) != 1) {
            throw new ExcepcionPersistencia("El pelicula no se ha dado de alta correctamente");
        }
    }

    public static int mostrarPeliculas() {
        List<Pelicula> peli = PersistenciaArticulo.devolverPelicula();
        if (peli.isEmpty()) {
            System.out.println("No hay ningun articulo en venta");
        }
        Iterator it = peli.iterator();
        while (it.hasNext()) {
            Pelicula p = (Pelicula) it.next();
            System.out.println(p);
        }
        return peli.size();
    }
    
    /**
     * Busca articulos que coincidan con el genero
     * @param genero 
     */
    public static void busquedaGenero(String genero) {
        List<Articulo> lista = PersistenciaArticulo.obtenerArticulos("genero", genero);
        if(lista.isEmpty()){
            System.out.println("No existe ningun genero");
        }
        Iterator it = lista.iterator();
        while (it.hasNext()) {
            Articulo a = (Articulo) it.next();
            System.out.println(a.toString());
        }
    }
    
    /**
     * Busca peliculas que coincidan en el año
     * @param anyo 
     */
    public static void busquedaAnyo(int anyo) {
        List<Articulo> lista = PersistenciaArticulo.obtenerArticulos("ano", Integer.toString(anyo));
        if(lista.isEmpty()){
            System.out.println("No existen años");
        }
        Iterator it = lista.iterator();
        while (it.hasNext()) {
            Articulo a = (Articulo) it.next();
            System.out.println(a.toString());
        }
    }
    
    /**
     * Busca peliculas que coincidan en el director
     * @param director 
     */
    public static void busquedaDirector(String director) {
        List<Articulo> lista = PersistenciaArticulo.obtenerArticulos("director", director);
        if(lista.isEmpty()){
            System.out.println("No existen directores");
        }
        Iterator it = lista.iterator();
        while (it.hasNext()) {
            Articulo a = (Articulo) it.next();
            System.out.println(a.toString());
        }
    }
    
    /**
     * Carga una lista de peliculas cuya valoracion es superior a 5 a traves de Persistencia Articulo
     */
    public static void mostrarMejoresPeliculas() {
        List<Articulo> lista = PersistenciaArticulo.mostrarMejorValoradas();
        if (lista.isEmpty()) {
            System.out.println("No hay novedades de este año");
        } else {
            Iterator it = lista.iterator();
            while (it.hasNext()) {
                Articulo art = (Articulo) it.next();
                if (art instanceof Pelicula) {
                    Pelicula p = (Pelicula) art;
                    System.out.println(p.toString());
                }
            }
        }
    }
    
    /**
     * Carga una lista de artículos a través de la Persistencia de Articulo cuyo año es el actual 
     */
    public static void mostrarNovedades() {
        List<Articulo> lista = PersistenciaArticulo.mostrarNovedades();
        if (lista.isEmpty()) {
            System.out.println("No hay peliculas de este año");
        } else {
            Iterator it = lista.iterator();
            while (it.hasNext()) {
                Pelicula p = (Pelicula) it.next();
                System.out.println(p.toString());
            }
        }
    }
    
}
